One of the challenges for network service providers is effective resource management. The resources of any computing environment (e.g., processing power, memory, data storage) are finite and constrained. While certain resources may be generally available, other resources may only be available to certain components of a network. For example, in a cloud-computing environment processors and memory are typically confined to individual physical machines and can be shared only locally; while data storage is often provided as a pooled service where multiple physical machines can access and share the storage capacity. As such, an on-going challenge for network service providers is to determine how to efficiently allocate and utilize resources in an inherently dynamic, complex, and heterogeneous cloud-computing environment.
A virtual machine is an instance of an operating system along with one or more applications running in an isolated partition within a computer. For the purposes of the description herein, a virtual machine can be viewed as a processing job requiring certain amounts of computing resources of different types. Virtual machines may be employed in a cloud-computing environment to enable resource sharing and reconfigurations of cloud-computing systems and networks. Virtual machines can share processor and memory resources by residing on a common physical machine, and can be resized (e.g., change the amounts of resources that they require) and migrated (e.g., to other physical machines) based on load-balancing and/or other requirements. As such, the flexibility of virtual machines can allow communication service providers to offer customers processing and storage services in a pay-as-you-go manner while allocating resources more efficiently. Moreover, methods to optimize the deployment of virtual machines in a cloud-computing environment may contribute further to meeting network service provider load-balancing and/or other requirements.